package br.com.sgc.entities.rh;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.sgc.entities.geral.HorarioFuncionario;
import br.com.sgc.entities.geral.PessoaFisica;
import br.com.sgc.entities.seguranca.Usuario;

@Entity
@Table(schema="rh")
public class Funcionario extends PessoaFisica implements Serializable{

	private static final long serialVersionUID = 820472455659098632L;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="cargo_id")
	private Cargo cargo = new Cargo();
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="funcao_id")
	private Funcao funcao = new Funcao();
	
	private String matricula;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="horario_fucionario_id")
	private HorarioFuncionario horarioFuncionario = new HorarioFuncionario();
	
	@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name="usuario_id")
	private Usuario usuario = new Usuario();
	
	private Boolean status;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_entrada")
	private Date dataEntrada;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_saida")
	private Date dataSaida;
	
	private Boolean isFerias;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_inicio_ferias")
	private Date dataInicioFerias;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_retorno_ferias")
	private Date dataRetornoFerias;
	
	@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	@JoinColumn(name = "proventos_id")
	private Proventos proventos = new Proventos();
	
	public Cargo getCargo() {
		return cargo;
	}

	public void setCargo(Cargo cargo) {
		this.cargo = cargo;
	}

	public Funcao getFuncao() {
		return funcao;
	}

	public void setFuncao(Funcao funcao) {
		this.funcao = funcao;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public HorarioFuncionario getHorarioFuncionario() {
		return horarioFuncionario;
	}

	public void setHorarioFuncionario(HorarioFuncionario horarioFuncionario) {
		this.horarioFuncionario = horarioFuncionario;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Boolean getStatus() {
		return status;
	}

	public void setStatus(Boolean status) {
		this.status = status;
	}

	public Date getDataEntrada() {
		return dataEntrada;
	}

	public void setDataEntrada(Date dataEntrada) {
		this.dataEntrada = dataEntrada;
	}

	public Date getDataSaida() {
		return dataSaida;
	}

	public void setDataSaida(Date dataSaida) {
		this.dataSaida = dataSaida;
	}

	public Boolean getIsFerias() {
		return isFerias;
	}

	public void setIsFerias(Boolean isFerias) {
		this.isFerias = isFerias;
	}

	public Date getDataInicioFerias() {
		return dataInicioFerias;
	}

	public void setDataInicioFerias(Date dataInicioFerias) {
		this.dataInicioFerias = dataInicioFerias;
	}

	public Date getDataRetornoFerias() {
		return dataRetornoFerias;
	}

	public void setDataRetornoFerias(Date dataRetornoFerias) {
		this.dataRetornoFerias = dataRetornoFerias;
	}

	public Proventos getProventos() {
		return proventos;
	}

	public void setProventos(Proventos proventos) {
		this.proventos = proventos;
	}
}
